package ch.fhnw.oop2.wahlen; import java.util.List; import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.control.Label; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; /** * the application user interface */ public class ApplicationUI extends VBox implements ApplicationView { private final Presenter presenter; private TableView<Result> tableView; private Label label; /** * creates a new ApplicationUI */ public ApplicationUI() { initializeControls(); layoutControls(); addEventHandlers(); addValueChangeListeners(); addBindings(); presenter = new Presenter(this); } @Override public void setResults(List<Result> results) { ObservableList<Result> observableList = FXCollections.observableArrayList(); observableList.addAll(results); tableView.setItems(observableList); TableColumn<Result, String> nameColumn = new TableColumn<>("Gemeinde"); tableView.getColumns().add(nameColumn); nameColumn.setCellValueFactory(e -> new ReadOnlyObjectWrapper<>( e.getValue().getCommunityName() )); TableColumn<Result, String> canton = new TableColumn<>("Kanton"); tableView.getColumns().add(canton); canton.setCellValueFactory(e -> new ReadOnlyObjectWrapper<>( e.getValue().getCanton() )); TableColumn<Result, Integer> allowed = new TableColumn<>("Wahlberechtigte"); tableView.getColumns().add(allowed); allowed.setCellValueFactory(e -> new ReadOnlyObjectWrapper<>( e.getValue().getEligibleVoters() )); TableColumn<Result, Integer> voters = new TableColumn<>("Wähler"); tableView.getColumns().add(voters); voters.setCellValueFactory(e -> new ReadOnlyObjectWrapper<>( e.getValue().getEligibleVoters() )); TableColumn<Result, String> turnout = new TableColumn<>("Wahlbeteiligung"); tableView.getColumns().add(turnout); turnout.setCellValueFactory(e -> new ReadOnlyObjectWrapper<>( String.format("%f%s", 100 * e.getValue().getTurnout(), "%") )); label.setText(String.format("Wahlergebnisse der %d Gemeinden", results.size())); } private void initializeControls() { tableView = new TableView<>(); label = new Label(); } private void layoutControls() { getChildren().add(tableView); VBox.setVgrow(tableView, Priority.ALWAYS); getChildren().add(label); } private void addEventHandlers() { } private void addValueChangeListeners() { } private void addBindings() { } }